/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.ModeloCurso;
import com.ipartek.formacion.gestformwww.modelo.ModeloDiaClase;
import com.ipartek.formacion.gestformwww.modelo.beans.Calendario;
import com.ipartek.formacion.gestformwww.modelo.beans.CorreoCalendario;
import com.ipartek.formacion.gestformwww.modelo.beans.Curso;
import com.ipartek.formacion.gestformwww.modelo.beans.DiaClase;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Clase que realiza la accion de visualizar el calendario que se va a enviar por correo
 * @author Ainhoa
 */
public class VisualizarEnviarCalendarioCorreoAccion implements Accion {

    private final String visualizarcursos = "visualizar-curso-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        ModeloCandidato mcandidato = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
        ModeloCurso mcurso = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        ModeloDiaClase mdiaclase = (ModeloDiaClase) servlet.getServletContext().getAttribute("ModeloDiaClase");
        AccionServlet as = (AccionServlet) servlet;
        HttpSession sesion = request.getSession();
        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("mailPlantillas-mapeo");
        AccionRouter router = null;
        ArrayList<String> errores = new ArrayList<String>();
        CorreoCalendario correoCalendario = new CorreoCalendario();
        Curso curso = new Curso();
        Calendar fecha = (Calendar) request.getAttribute("fecha");
        ArrayList<Calendar> fechas = new ArrayList<Calendar>();
        Calendar c = null;
        Calendario cal = null;
        DiaClase diaC = new DiaClase();
        ArrayList<DiaClase> diasClase = new ArrayList<DiaClase>();
        ArrayList<DiaClase> diasConflicto = new ArrayList<DiaClase>();
        ArrayList<DiaClase> diaConflicto = new ArrayList<DiaClase>();
        String[] id;
        int meses = 0;
        int mesIni=0;
        int idCurso = Integer.parseInt(request.getParameter("idCurso"));
        if (sesion.getAttribute("usuario") != null) {
            if (request.getParameter("idCurso") != null) {
                if (Verificador.numeroValido(request.getParameter("idCurso"))) {
                    try {
                        //Se carga el curso seleccionado
                        curso = mcurso.visualizarCurso(idCurso);
                        //se introducen las fechas de inicio y fin en el objeto correoCalendario
                        correoCalendario.setCalFechaIni(curso.getCurFchaInReal());
                        correoCalendario.setCalFechaFin(curso.getCurFchaFinReal());
                        //Separamos las fechas obtenidas en dia, mes y año
                        String fechaIni = Verificador.formatearFecha(curso.getCurFchaInReal());
                        String fechaFin = Verificador.formatearFecha(curso.getCurFchaFinReal());
                        String[] fI = fechaIni.split("/");
                        int diaIni = Integer.parseInt(fI[0]);
                        mesIni = Integer.parseInt(fI[1]);
                        int anyoIni = Integer.parseInt(fI[2]);
                        String[] fF = fechaFin.split("/");
                        int diaFin = Integer.parseInt(fF[0]);
                        int mesFin = Integer.parseInt(fF[1]);
                        int anyoFin = Integer.parseInt(fF[2]);
                        /*Metodo realizado en la clase Verificador.java que calcula los meses que hay
                         * entre dos fechas
                        */
                        meses = Verificador.mesesEntre(diaIni, mesIni, anyoIni, diaFin, mesFin, anyoFin);

                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(VisualizarEnviarCalendarioCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
//                    for(int i=mesIni; i<=(meses+1);i++)
//                    {
                            if (request.getParameter("fecha") != null && Verificador.fechaValida(request.getParameter("fecha")) && !request.getParameter("fecha").isEmpty()) {
                                fecha = Verificador.stringFecha(request.getParameter("fecha"));
                            } else {
                                try {
                                    fecha = mdiaclase.getPrimerDia(idCurso);
                                    
                                }catch (GestorFormacionExcepcion ex) {
                                    Logger.getLogger(VisualizarEnviarCalendarioCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                                }
                            }
//                        fechas.add(fecha);
//                    }
                    try {
                        fecha.set(Calendar.DAY_OF_MONTH, 1);
                        diasClase = mdiaclase.listarDiasClase(idCurso, fecha);

                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(VisualizarEnviarCalendarioCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    for (DiaClase d : diasClase) {
                        try {
                            diaConflicto = mdiaclase.getDiasConflictos(d);
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(VisualizarEnviarCalendarioCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                        diasConflicto.addAll(diaConflicto);
                    }
                    request.setAttribute("curso", curso);
                    request.setAttribute("meses", meses);
                    request.setAttribute("diaClase", diasClase);
                    request.setAttribute("diaConflicto", diasConflicto);
                    request.setAttribute("contenido", "enviar-correo-calendario");
                    request.setAttribute("fecha", fecha);
                    router = new AccionRouter("principal");

                } else {
                    try {
                        router = as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcursos), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(VisualizarEnviarMailAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(VisualizarEnviarMailAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(VisualizarEnviarMailAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        } else {
            router = new AccionRouter("inicio");
        }
        return router;

    }
}
